package cn.asura.otherChat.client;

import cn.asura.otherChat.thread.ClientThread;
import cn.asura.otherChat.util.ClientTool;

import java.io.File;
import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;

public class MyClient {

    public static void main(String[] args){
        Socket socket = null;

        PrintStream printStream = null;
        Scanner sc = null;

        try {
            // 获取用户的名字
            sc = new Scanner(System.in);
            System.out.print("请输入你的昵称：");
            // 用户名
            String username = sc.nextLine().strip();

            // 链接服务器并发送用户名给服务器
            socket = new Socket("192.168.208.28", 9090);
            printStream = new PrintStream(socket.getOutputStream());
            printStream.println(username);
            System.out.println("成功连接聊天室");

            // 根据用户名创建本地存储目录
            ClientTool.createLocalStrange(username);

            // 开启读取线程，专门读取服务器发送的消息
            ClientThread clientThread = new ClientThread(socket, username);
            new Thread(clientThread).start();


            // 无限循环获取用户聊天的输入，并发送消息或文件给服务器
            while (true) {
                // 获取用户的输入
                String userInput = sc.nextLine().strip();
                // 输入bye时退出登录并断开该用户的连接
                if ("bye".equalsIgnoreCase(userInput)) {
                    System.out.println("退出聊天室");
                    socket.close();
                    break;
                } else if ("send".equalsIgnoreCase(userInput)) {
                    // 提示用户输入文件名
                    System.out.print("请输入要发送的文件名：");
                    String fileName = sc.nextLine().strip();
                    // 根据文件名初始化文件
                    File file = new File("./storage/client/" + username + "/" + fileName);
                    if (file.isDirectory()) {
                        System.out.println("不支持发送目录文件");
                        continue;
                    }
                    // 检查文件是否存在
                    if (file.exists()) {
                        // 先发送 send 关建字到服务器
                        printStream.println(userInput);
                        // 再发送文件名
                        printStream.println(fileName);
                        // 最后发送的文件
                        ClientTool.sendFile(file, socket);
                    } else {
                        System.out.println("文件不存在");
                    }
                } else if ("download".equalsIgnoreCase(userInput)) {
                    System.out.print("请输入文件名：");
                    String fileName = sc.nextLine().strip();
                    // 先发送 download 关建字到服务器
                    printStream.println(userInput);
                    // 再发送文件名
                    printStream.println(fileName);
                } else {
                    // 通过输出流发送消息给服务器
                    printStream.println(userInput);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (null != printStream) {
                printStream.close();
            }
            if (null != sc) {
                sc.close();
            }
            if (null != socket) {
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
